package cn.tedu.exception;

import java.util.InputMismatchException;
import java.util.Scanner;

/*本类用来测试异常的入门案例*/
/*异常捕获处类的格式
 *
 *       try{
 *                   可能会出现异常的代码
 *    }catch(异常类型  异常的名字){
 *           捕获到了异常，进行处理的解决方案
 *   }
 *异常时典型的多态应用
 *
 * */
public class ExceptionDemo {

    public static void main(String[] args) {
        //  method1();  //人为暴露异常
       // method2();//异常解决方式一
        /*异常的抛出格式：再小括号与大括号之间写：throws 异常类型
        * 如果一个方法抛出了异常，那么谁调用这个方法，谁就需要处理这个异常
        * 两种解决方法  继续向上抛 或者解决掉
        * 一般在main方法调用之前解决而不是把问题抛给main方法，因为没人解决了*/
      f();//在main调用之前对异常进行解决
           // method3();//向上抛出--交给调用者来处理

    }

    private static void f() {
        try {
            method3();
        } catch (Exception e) {
            System.out.println("输入数据非法");
        }
    }

    private static void method3() throws Exception {

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个整数");//.InputMismatchException 输入的值与接收的类型不一样

        int i = scanner.nextInt();
        System.out.println("请输入第二个整数");
        int j = scanner.nextInt();
        System.out.println(i / j);//ArithmeticException: / by zero 算术异常 除数不能为0

    }

    private static void method2() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个整数");//.InputMismatchException 输入的值与接收的类型不一样
        /*try中存放着的时可能会出现异常的代码
        * 如果发生了异常，会被catch捕获，执行之前catch中提供的解决方案
        * try -catch可以嵌套，若果有多种异常类型需要特殊处理的话
        * 这就是多态最为经典的一种用法，我们并不关心子类的具体类型，而是将所有子类统一当做父类类型来处理，提供通用的解决方案*/
        try {

            int i = scanner.nextInt();
            System.out.println("请输入第二个整数");
            int j = scanner.nextInt();
            System.out.println(i / j);//ArithmeticException: / by zero 算术异常 除数不能为0
        } catch (InputMismatchException i) {
            System.out.println("输入数据非法");
        }catch (ArithmeticException a){
            System.out.println("0不能作为被除数");
        }catch (Exception e){
            System.out.println("您输入的数据不对");
        }finally {
            System.out.println("瞎巴巴");
        }


    }

    /*1.不要害怕bug，真正的勇士敢于直面自己写的bug
     * 2.学会看报错的信息提示，确定自己的错误方向
     * 3.学会看报错的行号信息确定自己的报错位置，哪里不对点哪里
     * 注意 源码不会错，要看自己写的代码*/
    private static void method1() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个整数");//.InputMismatchException 输入的值与接收的类型不一样

        int i = scanner.nextInt();
        System.out.println("请输入第二个整数");
        int j = scanner.nextInt();
        System.out.println(i / j);//ArithmeticException: / by zero 算术异常 除数不能为0


    }
}
